#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void printPending(sigset_t * pending)
{
  int i=0;
  for(i=1;i<=31;i++)
  {
    if(sigismember(pending,i))//判断信号是否存在
    {
      printf("1");
    }
    else
    {
      printf("0");
    }
  }
  printf("\n");
}
//捕捉二号信号
void handler(int signo)
{
  printf("%d已经被捕捉\n",signo);
}
int main()
{
  signal(2,handler);
  //栈
  sigset_t set,oset;
  sigemptyset(&set);
  sigemptyset(&oset);//置空
  sigaddset(&set,2);//set信号集添加2号信号
  sigprocmask(SIG_BLOCK,&set,&oset);//将2号信号阻塞
  sigset_t pending;
  int count=0;
  while(1)
  {
    sigemptyset(&pending);
    sigpending(&pending);//获取pending信号集
    printPending(&pending);//打印pending
    sleep(1);
    count++;
    if(count==6)
    {
      sigprocmask(SIG_SETMASK,&oset,NULL);//恢复信号屏蔽字
      printf("已经恢复\n");
    }
  }
  return 0;
}
